Telegram Group & Telegram Channel
🐍 Задача на внимательность и понимание области видимости в Python: «Почему список не заполняется?»

🎯 Цель: Найти, почему переменная ведёт себя не так, как ожидается

📍 Ситуация:

У тебя есть простой код, который должен собирать данные в список из файла:


results = []

def process_file(path):
for line in open(path):
if "error" in line:
results.append(line.strip())

# где-то в другом месте:
process_file("logs1.txt")
process_file("logs2.txt")

print(f"Total errors: {len(results)}")


Но после запуска ты получаешь:

Total errors: 0


🙃 Хотя ты уверен, что в обоих файлах есть строки с "error".

🧩 Задача:

1. Почему список results остаётся пустым?
2. Почему нет ошибки при обращении к results.append(...)?
3. Что будет, если вместо append() просто написать results = [...] внутри функции?
4. Как правильно модифицировать глобальную переменную?
5. Как сделать поведение явным и безопасным?

🛠 Решение:

🔸 Проблема в области видимости переменных:
Функция использует results, определённый вне функции, но не объявляет его как global.
Однако results.append(...) — это допустимая операция, так как она не переназначает переменную, а вызывает метод объекта.

Если бы внутри функции была строка results = [...], Python бы создал локальную переменную results, и тогда append бы вызывал UnboundLocalError.

🔸 Для ясности и чистоты кода лучше делать так:


def process_file(path, results):
for line in open(path):
if "error" in line:
results.append(line.strip())

results = []
process_file("logs1.txt", results)
process_file("logs2.txt", results)


Или, если обязательно нужно использовать глобальную переменную:


results = []

def process_file(path):
global results
for line in open(path):
if "error" in line:
results.append(line.strip())


🔸 Проверка:

- print(locals()) — покажет локальные переменные
- print(globals()) — покажет глобальные

📌 Вывод:
В Python изменение содержимого изменяемой глобальной переменной внутри функции возможно без global, но присваивание новой переменной требует явного global. Это тонкое поведение, которое часто приводит к ошибкам, особенно при работе со списками и словарями.



tg-me.com/python_job_interview/1123
Create:
Last Update:

🐍 Задача на внимательность и понимание области видимости в Python: «Почему список не заполняется?»

🎯 Цель: Найти, почему переменная ведёт себя не так, как ожидается

📍 Ситуация:

У тебя есть простой код, который должен собирать данные в список из файла:


results = []

def process_file(path):
for line in open(path):
if "error" in line:
results.append(line.strip())

# где-то в другом месте:
process_file("logs1.txt")
process_file("logs2.txt")

print(f"Total errors: {len(results)}")


Но после запуска ты получаешь:

Total errors: 0


🙃 Хотя ты уверен, что в обоих файлах есть строки с "error".

🧩 Задача:

1. Почему список results остаётся пустым?
2. Почему нет ошибки при обращении к results.append(...)?
3. Что будет, если вместо append() просто написать results = [...] внутри функции?
4. Как правильно модифицировать глобальную переменную?
5. Как сделать поведение явным и безопасным?

🛠 Решение:

🔸 Проблема в области видимости переменных:
Функция использует results, определённый вне функции, но не объявляет его как global.
Однако results.append(...) — это допустимая операция, так как она не переназначает переменную, а вызывает метод объекта.

Если бы внутри функции была строка results = [...], Python бы создал локальную переменную results, и тогда append бы вызывал UnboundLocalError.

🔸 Для ясности и чистоты кода лучше делать так:


def process_file(path, results):
for line in open(path):
if "error" in line:
results.append(line.strip())

results = []
process_file("logs1.txt", results)
process_file("logs2.txt", results)


Или, если обязательно нужно использовать глобальную переменную:


results = []

def process_file(path):
global results
for line in open(path):
if "error" in line:
results.append(line.strip())


🔸 Проверка:

- print(locals()) — покажет локальные переменные
- print(globals()) — покажет глобальные

📌 Вывод:
В Python изменение содержимого изменяемой глобальной переменной внутри функции возможно без global, но присваивание новой переменной требует явного global. Это тонкое поведение, которое часто приводит к ошибкам, особенно при работе со списками и словарями.

BY Python вопросы с собеседований


Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283

Share with your friend now:
tg-me.com/python_job_interview/1123

View MORE
Open in Telegram


Python вопросы с собеседований Telegram | DID YOU KNOW?

Date: |

China’s stock markets are some of the largest in the world, with total market capitalization reaching RMB 79 trillion (US$12.2 trillion) in 2020. China’s stock markets are seen as a crucial tool for driving economic growth, in particular for financing the country’s rapidly growing high-tech sectors.Although traditionally closed off to overseas investors, China’s financial markets have gradually been loosening restrictions over the past couple of decades. At the same time, reforms have sought to make it easier for Chinese companies to list on onshore stock exchanges, and new programs have been launched in attempts to lure some of China’s most coveted overseas-listed companies back to the country.

How to Buy Bitcoin?

Most people buy Bitcoin via exchanges, such as Coinbase. Exchanges allow you to buy, sell and hold cryptocurrency, and setting up an account is similar to opening a brokerage account—you’ll need to verify your identity and provide some kind of funding source, such as a bank account or debit card. Major exchanges include Coinbase, Kraken, and Gemini. You can also buy Bitcoin at a broker like Robinhood. Regardless of where you buy your Bitcoin, you’ll need a digital wallet in which to store it. This might be what’s called a hot wallet or a cold wallet. A hot wallet (also called an online wallet) is stored by an exchange or a provider in the cloud. Providers of online wallets include Exodus, Electrum and Mycelium. A cold wallet (or mobile wallet) is an offline device used to store Bitcoin and is not connected to the Internet. Some mobile wallet options include Trezor and Ledger.

Python вопросы с собеседований from ua


Telegram Python вопросы с собеседований
FROM USA